//例如我们的手机号通常是13XXXXXXX 为数字类型 这时候产品说需要支持座机
//所以我们就可以使用联合类型支持座机字符串
let myphone: number | string = '010-820'
// let myPhone: number | string = true  // 这样写是会报错的应为我们的联合类型只有数字和字符串并没有布尔值

// 字符串字面量类型
type Easing = "ease-in" | "ease-out" | "ease-in-out";
class UIElement{
  animate(dx: number, dy: number, easing: Easing) {
    if (easing === "ease-in") {
      //
      
    }
    else if (easing==="ease-out") {
    }
    else if (easing==="ease-in-out") {
    }
    else {
      // error!should not pass null or undefined.
    }
  }
}
let button = new UIElement();
button.animate(0,0,"ease-in")
// button.animate(0, 0, "uneasy");// error:要在Easing类型中选

// 字符串字面量类型还可以用于区分函数重载：


function createElement(tagName: "img"): HTMLImageElement;
function createElement(tagName: "input"): HTMLInputElement;
// ... more overloads ...
function createElement(tagName: string): Element {
    return new Element();
    // ... code goes here ...
}
// 编写一个 TypeScript 交叉类型，它结合了以下两个接口：interface User { name : string ; age : number ;} interface Contact { email : string ; phone : string ;}// 要求：创建一个新的交叉类型 UserContact ，它包含 User 和 Contact 接口的所有属性。
interface User{
  name: string;
  age: number;
}
interface Contact{
  email: string;
  phone: string;
}



type UserContact = User & Contact;

// 使用 UserContact 类型创建一个对象
const userContact: UserContact = {
  name: "张三",
  age: 30,
  email: "zhangsan@example.com",
  phone: "123-456-7890"
};

// 打印 userContact 对象以验证其属性
console.log(userContact);

